//   Written by Terry Friesen,  tfriesen@mts.net
//   http://www.mts.net/~tfriesen/dhtml/

//   This script gives Netscape 6 the following IE methods:
//   removeNode(),replaceNode(),swapNode(),applyElement(),contains(),
//   insertAdjacentText(),insertAdjacentHTML(),insertAdjacentElement()


if(self.Node&&self.Node.prototype){
Node.prototype.removeNode=remove_Node;
Node.prototype.replaceNode=replace_Node;
Node.prototype.swapNode=swap_Node;
Element.prototype.applyElement=apply_Element;
Element.prototype.contains=_contains;
Element.prototype.insertAdjacentText=insertAdj_Text;
Element.prototype.insertAdjacentHTML=insertAdj_HTML;
Element.prototype.insertAdjacentElement=insertAdj_El;
Element.prototype.insert__Adj=insert__Adj;
}

function remove_Node(a1){
var p=this.parentNode;
if(p&&!a1){
var df=document.createDocumentFragment();
for(var a=0;a<this.childNodes.length;a++){
df.appendChild(this.childNodes[a])
}
p.insertBefore(df,this)
}
return p?p.removeChild(this):this;
}

function replace_Node(a1){return this.parentNode.replaceChild(a1,this)}

function swap_Node(a1){
var p=a1.parentNode;
var s=a1.nextSibling;
this.parentNode.replaceChild(a1,this);
p.insertBefore(this,s)
return this;
}

function apply_Element(a1,a2){
if(!a1.splitText){
a1.removeNode();
if(a2&&a2.toLowerCase()=="inside"){
for(var a=0;a<this.childNodes.length;a++){
a1.appendChild(this.childNodes[a])
}
this.appendChild(a1)
}
else{
var p=this.parentNode;
p.insertBefore(a1,this);
a1.appendChild(this);
}
return a1;
}
}

function _contains(a1){
var r=document.createRange();
r.selectNode(this);
return r.compareNode(a1)==3;
}

function insertAdj_Text(a1,a2){
var t=document.createTextNode(a2||"")
this.insert__Adj(a1,t);
}

function insertAdj_HTML(a1,a2){
var r=document.createRange();
r.selectNode(this);
var t=r.createContextualFragment(a2);
this.insert__Adj(a1,t);
}

function insertAdj_El(a1,a2){
this.insert__Adj(a1,a2);
return a2;
}

function insert__Adj(a1,a2){
var p=this.parentNode;
var s=a1.toLowerCase();
if(s=="beforebegin"){p.insertBefore(a2,this)}
if(s=="afterend"){p.insertBefore(a2,this.nextSibling)}
if(s=="afterbegin"){this.insertBefore(a2,this.childNodes[0])}
if(s=="beforeend"){this.appendChild(a2)}
}